/**
 * 
 */
package model;

import java.io.IOException;
import java.util.ArrayList;

import model.container.CursistenException;

/**
 * Deze klassebevat de nodige code om een HerscholingCursist aan te maken, deze erft over van de
 * klasse Cursist
 * 
 * @author Nicolas Vanderhulst
 * @author Yves Vandeput
 * @version 20111009
 */
public class HerscholingCursist extends Cursist {

	// Declareren van variabelen
	private String hoogsteDiploma;
	private String redenHerscholing;

	// Getters and Setters
	public String getHoogsteDiploma() {
		return hoogsteDiploma;
	}

	public void setHoogsteDiploma(String hoogsteDimploma) {
		this.hoogsteDiploma = hoogsteDimploma;
	}

	public String getRedenHerscholing() {
		return redenHerscholing;
	}

	public void setRedenHerscholing(String redenHerscholing) {
		this.redenHerscholing = redenHerscholing;
	}

	// Basis constructor
	public HerscholingCursist(int cursistnummer, String cursistnaam, String hoogstediploma, String redenherscholing) {
		super(cursistnaam, cursistnummer);
		this.setHoogsteDiploma(hoogstediploma);
		this.setRedenHerscholing(redenherscholing);
	}

	// Constructor met voorgaande opleidingen
	public HerscholingCursist(int cursistnummer, String cursistnaam, String hoogstediploma, String redenherscholing,
			ArrayList<CursusHistoriek> voorgaandeCursussen) {
		super(cursistnaam, cursistnummer, voorgaandeCursussen);
		this.setHoogsteDiploma(hoogstediploma);
		this.setRedenHerscholing(redenherscholing);
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		Object tempCursist = super.clone();
		((HerscholingCursist) tempCursist).setHoogsteDiploma(this.getHoogsteDiploma());
		((HerscholingCursist) tempCursist).setRedenHerscholing(this.getRedenHerscholing());
		return tempCursist;
	}

	@Override
	public int compareTo(Cursist o) {
		Cursist c = o;
		if (c.hashCode() < o.hashCode()) {
			return -1;
		} else if (c.hashCode() > o.hashCode()) {
			return 1;
		} else {
			if (c.getNaam().hashCode() < o.getNaam().hashCode()) {
				return -1;
			} else if (c.getNaam().hashCode() > o.getNaam().hashCode()) {
				return 1;
			} else {
				return 0;
			}
		}
	}

	@SuppressWarnings("null")
	@Override
	public HerscholingCursist maakObjectVanTekst(String input) throws IOException, NumberFormatException,
			CursistenException {
		String[] tokens = input.split("\t");

		// Opvullen variabelen
		int tempID = (Integer.parseInt(tokens[0]));
		String tempNaam = tokens[1];
		String tempHoogsteDiploma = tokens[2];
		String tempRedenHerscholing = tokens[3];

		// Aanmaken Herscholingscursist
		HerscholingCursist tempCursist = new HerscholingCursist(tempID, tempNaam, tempHoogsteDiploma,
				tempRedenHerscholing);
		return tempCursist;
	}

	@SuppressWarnings("boxing")
	@Override
	public String maakTekstVanObject() throws IOException {
		return String.format("%s\t%s\t%s\t%s\n", this.getID(), this.getNaam(), this.getHoogsteDiploma(),
				this.getRedenHerscholing());
	}

}
